;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; \brief	自己从头编写汇编程序，不使用Keil自带的跳转到main函数功能，不使用
;			Keil自带的reg51.h寄存器头文件
; \note		这个汇编文件里并不是程序执行的第一条语句，而是第二条语句，第一条语句
;			在FIRST.ASM中的复位中断里
; \note		File format: UTF-8
; \author	将狼才鲸
; \date		2022-10-30
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    ; 声明代码段
    C51_STARTUP  SEGMENT CODE;    AT  100H; 声明代码段名，从ROM中0x100处开始存放
    RSEG    C51_STARTUP ; 用再定位段做当前段

    PUBLIC  STARTUP     ; 输出标量，可以理解为函数，给复位中断调用

#include <R8051XC_REG.INC>	; 也可以使用$INCLUDE
#include <HW_INIT.ASM>

;;
; \brief	除了复位中断，第一个进入的函数（标号）
;;      
STARTUP:
	CLR EAL     ; 禁止所有中断
	CLR RS0     ; r0~r7寄存器组选择第一组
	CLR RS1		; r0~r7寄存器组选择第一组

	MOV IEN0,   #0H     ; 禁止每一个中断
	MOV IEN1,   #0H
	MOV IEN2,   #0H
	MOV IEN4,   #0H

    NOP                     ; 空指令
	MOV SP,     #ORG_SP     ; 赋值堆栈指针，堆栈起始地址在R8051XC_REG.INC中定义

    NOP
    LCALL   _hw_init        ; 汇编语言的必要硬件初始化
    
	; 这里写你的汇编函数
	
dead_loop:
    NOP
    LJMP	dead_loop ; 死循环
    
    NOP
    RET ; 函数返回

    END ; 汇编文件结束
